package com.xgz.processor.factorypost;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.core.PriorityOrdered;
import org.springframework.stereotype.Component;

/**
 * PriorityOrdered 接口 > Order 接口，就算都 实现了，以 PriorityOrdered 为准。
 * Bean定义信息注册器后置增强
 * @author xgz
 */
@Component
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor, PriorityOrdered {

	public MyBeanDefinitionRegistryPostProcessor() {
		System.out.println("My BeanDefinitionRegistryPostProcessor构造器 执行");
	}

	// 这个是 继承 BeanFactoryPostProcessor 接口的方法
	@Override // 后执行
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		System.out.println("MyBeanDefinitionRegistryPostProcessor#postProcessBeanFactory");
	}

	// 这个是 BeanDefinitionRegistryPostProcessor 新增的 方法
	@Override // 先执行
	public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
		System.out.println("MyBeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry");
	}

	@Override
	public int getOrder() {
		return 99;  // 优先级 数字越小，优先级越高
	}
}
